package com.zkh.myutils.net.upload;

import java.util.ArrayList;
import java.util.List;

/**
 * 上传文件对象（包含字段域和文件域）
 */
public class FileItem {
	private boolean file;		//是否是文件。非文件，则为表单值。
	private String fieldname;	//字段名
	private List<String> fieldValueList;	//字段值
	private List<UploadFile> uploadFileList;	//上传文件
	
	/**
	 * 是否是文件
	 */
	public boolean isFile() {
		return file;
	}
	void setFile(boolean file) {
		this.file = file;
	}
	/**
	 * 字段名。表单中的name属性值
	 */
	public String getFieldname() {
		return fieldname;
	}
	void setFieldname(String fieldname) {
		this.fieldname = fieldname;
	}
	/**
	 * 获取表单值，主要针对多值，如复选框等
	 */
	public List<String> getFieldValueList() {
		return fieldValueList;
	}
	/**
	 * 获取表单值，主要针对单值。
	 * @return 表单值
	 */
	public String getFieldValue() {
		return fieldValueList==null || fieldValueList.size()==0 ? null : fieldValueList.get(0);
	}
	/**
	 * 获取最新一个表单值
	 */
	void addLastFieldValue(String fieldValue) {
		//索引
		int idx = fieldValueList.size() - 1;
		//拼接值
		fieldValueList.set(idx, fieldValueList.get(idx)+fieldValue);
	}
	/**
	 * 添加表单值
	 */
	void addFieldValue(String fieldValue) {
		//未初始化集合
		if(fieldValueList==null) fieldValueList = new ArrayList<>();
		//添加值
		fieldValueList.add(fieldValue);
	}
	/**
	 * 获取文件上传对象列表（单表单字段多文件上传）
	 */
	public List<UploadFile> getUploadFileList() {
		return uploadFileList;
	}
	/**
	 * 获取文件上传对象（单表单字段单文件上传）
	 */
	public UploadFile getUploadFile() {
		return uploadFileList==null || uploadFileList.size()==0 ? null : uploadFileList.get(0);
	}
	/**
	 * 获取最新一个文件上传对象
	 */
	UploadFile getLastUploadFile() {
		return uploadFileList.get(uploadFileList.size()-1);
	}
	/**
	 * 添加一个上传文件对象
	 */
	void addUploadFile(UploadFile uploadFile) {
		//未初始化集合
		if(uploadFileList==null) uploadFileList = new ArrayList<>();
		//添加上传文件
		if(uploadFile!=null) uploadFileList.add(uploadFile);
	}
	/**判断表单是否存在(以表单的name属性判断)*/
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((fieldname == null) ? 0 : fieldname.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		FileItem other = (FileItem) obj;
		if (fieldname == null) {
			if (other.fieldname != null)
				return false;
		} else if (!fieldname.equals(other.fieldname))
			return false;
		return true;
	}
	@Override
	public String toString() {
		return "FileItem [file=" + file + ", fieldname=" + fieldname
				+ ", fieldValueList=" + fieldValueList + ", uploadFileList="
				+ uploadFileList + "]";
	}
}
